/**
* File Name: 01mmap_build.c
* Auther: Jichang
* Create Time: 2023年10月05日 星期四 16时35分37秒
* 创建共享内存
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<fcntl.h>
#include<sys/mman.h>

void sys_err(const char *str) {
	perror(str);
	exit(1);
}

int main(int argc, char *argv[]) {
	char *p = NULL;
	int fd;

	fd = open("test_map", O_RDWR|O_CREAT|O_TRUNC, 0644);
	if(fd == -1) {
		sys_err("open error");
	}
	/* 拓展文件大小 */
	/*
	 * lseek(fd, 10, SEEK_END);
	 * write(fd, "\0", 1);
	 * int len = lseek(fd, 0, SEEK_END);
     */
	ftruncate(fd, 20); //需要写权限才能改变大小
	int len = lseek(fd, 0, SEEK_END);

	p = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
	if(p == MAP_FAILED) {
		sys_err("mmap error");
	}

	/* 使用p进行文件进行读写操作 */
	strcpy(p, "hello mmap"); //写操作

	printf("--%s\n", p); //读操作

	/* 释放缓存区 */
	int ret = munmap(p, len);
	if(ret == -1) {
		sys_err("mumap error");
	}
	close(fd);

	return 0;
}

